package com.kai.steering.data.service.service;

import com.kai.steering.data.service.entity.domainObject.QuestionDO;
import com.kai.steering.data.service.entity.domainObject.TestDO;
import com.kai.steering.data.service.entity.dto.TestQueryDTO;
import com.kai.steering.data.service.entity.po.Test;
import com.kai.steering.common.web.service.BaseService;
import com.kai.steering.common.vo.Page;
import com.kai.steering.data.service.entity.po.WarehouseTest;
import com.kai.steering.data.service.entity.vo.QuestionVO;
import com.kai.steering.data.service.entity.vo.TestVO;
import com.kai.steering.exception.ExcelException;
import org.springframework.web.multipart.MultipartFile;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;

/**
 * <pre>
 * 试卷 服务类
 * </pre>
 *
 * @author kai
 * @since 2022-02-23
 */
public interface TestService extends BaseService<Test> {

    /**
     * 保存
     *
     * @param testDO
     * @return
     */
    TestDO saveTest(TestDO testDO);

    /**
     * 修改
     *
     * @param test
     * @return
     */
    boolean updateTest(Serializable id, TestDO test);

    /**
     * 删除
     *
     * @param id
     * @return
     */
    boolean deleteTest(Serializable id);

    /**
     * 根据ID获取查询对象
     *
     * @param id
     * @return
     */
    public TestDO getTestById(Serializable id, HashMap<String,Boolean>parameterMap) ;

    /**
     * 获取所有对象
     *
     * @return
     */
    List<TestDO> getAllTest();

    /**
     * 获取分页对象
     *
     * @param testQueryDTO
     * @return
     */
    Page<TestDO> getTestPageList(TestQueryDTO testQueryDTO);

    /**
     * 判断某属性是否存在
     *
     * @param key
     * @param val
     * @param id
     * @return
     */
    boolean isExists(String key, String val, Serializable id);

    /**
     * 根据名称查询
     * @param testName
     * @return
     */
    TestDO getTestByName(String testName);

    /**
     * 导出
     * @param testIds
     * @return
     */
    boolean exportTest(List<String> testIds);

    /**
     * 导入
     * @param file
     * @return
     */
    String importTest(MultipartFile file);

    /**
     * 导入题目
     * @param testID
     * @param questionsIDs
     * @return
     */
    boolean exportQuestion(String testID,List<String>questionsIDs);
    //根据ID列获取数据
     List<TestDO> getTestByIds(List<String> collect);
    //根据列获取数据
     List<TestDO> getTestByWarehouseTest(List<WarehouseTest> collect);

    void importQuestion(String toString, MultipartFile file);
}

